package com.cskaoyan.javase.array._3exception._2null;

/**
 * 空指针异常(NullPointerException)
 * 引用是可以指向null的,指向null代表没有指向任何对象, 这时如果仍然想用null引用访问对象,就会出现空指针异常
 *
 * 如何规避空指针异常?
 * 最简单,最朴实,也很有效的方式就是用if判断,只有当不等于null时,才使用引用访问对象
 *
 * 最后再提一点：
 * **我们在开发时，要明确知道程序中的引用哪里会指向null，哪里完全不会指向null，对于：**
 *
 * 1. 那些逻辑上，可能会指向null的引用，要在使用前慎重判断。如果等于null，需要做出相应处理（反正不能访问对象），判断不为null之后才能使用该引用访问对象。
 * 2. 那些逻辑上，完全不可能等于null的引用，就不应该做判断了。**一旦程序抛出空指针异常，要去排查为什么引用会等于null，然后修正程序。**
 *
 * @since 11:13
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // arr指向null
        int[] arr = null;
        if (arr != null) {
            System.out.println(arr.length);
        }

        /*
            在String操作中,如何避免空指针异常
            假如我想判断一个字符串,内容是不是空的""
            可以写 str1.equals("")
            也可以写"".equals(str1)
            原则上尽量用常量去调用方法，因为常量不可能等于null，也没有空指针异常
         */
        String str1 = new String("123");
        String str2 = new String("123");
        str1 = null;
        // Method invocation 'equals' will produce 'NullPointerException'
        // System.out.println(str1.equals(""));
        System.out.println("".equals(str1));
    }
}
